<?php

class Bibliografia{

	private $idBibliografia;
	private $idCurso;
	private $idUsuario;
	private $item;
	private $dataHoraInsercao;
	private $dataHoraUltimaModificacao;
	private $idUsuarioUltimaModificacao;
	
	/**
	 * @constructor
	 * @classDescription Funcao modelo que representa um Bibliografia.
	 * @param int $idBibliografia
	 */
	public function Bibliografia($idBibliografia){
		
		$strQuery = "SELECT * FROM bibliografias WHERE idBibliografia=".$idBibliografia;
		
		if($resultado = BancoDados::query($strQuery)){
			
			$this->setIdBibliografia($resultado[0]['idBibliografia']);
			$this->setIdCurso($resultado[0]['idCurso']);
			$this->setIdUsuario($resultado[0]['idUsuario']);
			$this->setItem($resultado[0]['item']);
			$this->setDataHoraInsercao($resultado[0]['dataHoraInsercao']);
			$this->setDataHoraUltimaModificacao($resultado[0]['dataHoraUltimaModificacao']);			
			$this->setIdUsuarioUltimaModificacao($resultado[0]['idUsuarioUltimaModificacao']);
		
		}else{
			$this->setIdBibliografia(null);	
		}
	}


	public static function inserir($idCurso, $idUsuario, $strItem){
		$strItem	=	htmlentities(strip_tags($strItem));
		if (Bibliografia::valida($strItem)) {
			$strQuery = "INSERT INTO bibliografias VALUES (default, " . $idCurso . ", " . $idUsuario . ", \"" . $strItem ."\", NOW(), NOW(), " . $idUsuario . ")";
		
			if (BancoDados::query($strQuery)) {
				$strQuery	=	"SELECT idBibliografia FROM bibliografias WHERE idCurso = " . $idCurso . " AND idUsuario = " . $idUsuario . " AND item = \"" . $strItem . "\" ORDER BY idBibliografia DESC LIMIT 1";
				if (is_array($resultado = BancoDados::query($strQuery))) {
					if (sizeof($resultado) > 0) {
						atualizaCurso($idCurso);
						return $resultado[0]['idBibliografia'];
					}
					else {
						return true;
					}
				}
				else {
					return true;
				}
			}
			else {
				return false;
			}
		}
		else {
			return false;
		}
	}
	
	public static function editar($idBibliografia, $idUsuario, $strItem){
		if (Bibliografia::valida($strItem)) {
			$strQuery = "UPDATE bibliografias SET item = \"". $strItem ."\", dataHoraUltimaModificacao = NOW(), idUsuarioUltimaModificacao = ". $idUsuario ." WHERE idBibliografia = ".$idBibliografia;
			atualizaCurso();
			return BancoDados::query($strQuery);
		}
		else {
			return false;
		}
	}
	
	public static function apagar($idBibliografia){
		$strQuery	=	"DELETE FROM associacoes WHERE (idElemento1 = " . $idBibliografia . " AND elemento1 = \"bibliografias\") OR (idElemento2 = " . $idBibliografia . " AND elemento2 = \"bibliografias\")";
		if (BancoDados::query($strQuery)) {
			$strQuery = "DELETE FROM bibliografias WHERE idBibliografia = " . $idBibliografia;
			atualizaCurso();
			return BancoDados::query($strQuery);
		}
		else {
			return false;
		}
	}
		
	public static function buscar($idBibliografia, $idCurso, $idUsuario, $strItem, $dataHoraInsercaoInicio, $dataHoraInsercaoFim, $paginaAtual = NULL, $resultadosPagina = NULL, $ordenacaoAtual = NULL, $ordemAtual = NULL){
		
		$strQuery = "SELECT idBibliografia as idItem, idCurso, idUsuario, item as titulo, dataHoraInsercao, dataHoraUltimaModificacao, idUsuarioUltimaModificacao FROM bibliografias WHERE ";
		
		$idBibliografias	=	null;
		if (is_array($idBibliografia)) {
			foreach ($idBibliografia as $id) {
				$idBibliografias	.=	$id . ", ";
			}
			$idBibliografias	=	preg_replace('/, $/', '', $idBibliografias);
		}
		else
			$idBibliografias	=	$idBibliografia;

		$strQuery .= $idBibliografias == null ? "" : "idBibliografia IN (" . $idBibliografias . ") AND ";
		$strQuery .= $idCurso == null ? "" : "idCurso = " . $idCurso . " AND ";
		$strQuery .= $idUsuario == null ? "" : "idUsuario = " . $idUsuario . " AND ";
		
		$strQuery .= $strItem == null ? "" : configuraRegexpStringBusca($strItem, 'item');
		
		$strQuery .= $dataHoraInsercaoInicio != null ? 'dataHoraInsercao >= "' . $dataHoraInsercaoInicio . ' 0:0:0" AND ' : '';
		$strQuery .= $dataHoraInsercaoFim != null ? 'dataHoraInsercao <= "' . $dataHoraInsercaoFim . ' 23:59:59" AND ' : '';
		
		$strQuery =	preg_replace('/ WHERE $/', ' ', $strQuery);
		$strQuery =	preg_replace('/ AND $/', ' ', $strQuery);
		
		$strQueryCount	=	'SELECT COUNT(*) AS qtdResultados FROM (' . $strQuery . ') AS queryOriginal';
		
		if ($resultadoCount = BancoDados::query($strQueryCount)) {
			foreach($resultadoCount as $resultado) {
				$qtdResultados	=	$resultado['qtdResultados'];
			}

			if ($qtdResultados > 0) {
				$paginaAtual	=	$paginaAtual == NULL	?	1 : $paginaAtual;
				$ordenacaoAtual	=	$ordenacaoAtual == NULL	?	'dataHoraInsercao' : $ordenacaoAtual;
				$ordemAtual		=	$ordemAtual == NULL		?	'ASC' : ($ordemAtual == 'desc' ? 'DESC' : 'ASC');
					
				$strQuery	.=	' ORDER BY ' . $ordenacaoAtual . ' ' . $ordemAtual;
					
				if ($resultadosPagina != NULL) {
					$qtdPaginas		=	ceil($qtdResultados / $resultadosPagina);
					$qtdPaginas		=	$qtdPaginas == 0 ? 1 : $qtdPaginas;

					$strQuery		.=	' LIMIT ' . $resultadosPagina . ' OFFSET ' . (($paginaAtual - 1) * $resultadosPagina);
					
				}else{
					$qtdPaginas	=	1;
				}
					
				$strQuery .= ';';
				
				$resultado = BancoDados::query($strQuery);
				
				if(is_array($resultado)){
					return array ('listaResultados' => $resultado, 'qtdResultadosTotal' => $qtdResultados, 'qtdPaginas' => $qtdPaginas);
				}else{
					return false;
				}
				
			}else{
				return array('listaResultados' => array(), 'qtdResultadosTotal' => 0, 'qtdPaginas' => 0);
			}
		}else{
			return false;
		}
		
	}
	
	/*
	 * Quando são inseridos vários itens de uma única vez, é necessário quebrar a string no enter
	 * para que cada item seja inserido separadamente no banco de dados
	 * 
	 * Além disso, também retira as possíveis linhas em branco
	 * 
	 * Returns $arrayItens 
	 * 
	 * */	
	public static function valida($strItem){
		$validou	=	true;

		if ($strItem == '') {
			$validou	=	false;
			adicionaMensagem(texto('MENSAGEM_ERRO_VALIDACAO_CAMPO_INPUT', array(texto('DADOS_ITEM'))), 'erro');
		}
		
		return $validou;
	}
	
	
	public function getIdBibliografia(){
		return $this->idBibliografia;
	}
	
	public function setIdBibliografia($idBibliografia){
		$this->idBibliografia = $idBibliografia;
	}
	
	public function getIdCurso(){
		return $this->idCurso;
	}
	
	public function setIdCurso($idCurso){
		$this->idCurso = $idCurso;
	}
	
	public function getIdUsuario(){
		return $this->idUsuario;
	}
	
	public function setIdUsuario($idUsuario){
		$this->idUsuario = $idUsuario;
	}
	
	public function getItem(){
		return $this->item;
	}
	
	public function setItem($item){
		$this->item = $item;
	}
	
	public function getDataHoraInsercao(){
		return $this->dataHoraInsercao;
	}
	
	public function setDataHoraInsercao($dataHoraInsercao){
		$this->dataHoraInsercao = $dataHoraInsercao;
	}
	
	public function getDataHoraUltimaModificacao(){
		return $this->dataHoraUltimaModificacao;
	}
	
	public function setDataHoraUltimaModificacao($dataHoraUltimaModificacao){
		$this->dataHoraUltimaModificacao = $dataHoraUltimaModificacao;
	}
	
	public function getIdUsuarioUltimaModificacao(){
		return $this->idUsuarioUltimaModificacao;
	}
	
	public function setIdUsuarioUltimaModificacao($idUsuarioUltimaModificacao){
		$this->idUsuarioUltimaModificacao = $idUsuarioUltimaModificacao;
	}

}	
?>